package base.generic.demo04;

/**
 *	MinMaxImpl类实现MinMax<T>，注意写法，不是MinMax<T extends Comparable<T>>
 *	MinMax<T>泛型接口限定了MinMaxImpl<T extends Comparable<T>> 中 T 必须实现Comparable接口。
 *只有这样，我们在创建 MinMaxImpl实例时指定T类型，才能满足 implements MinMax 接口中定义的规范。
 */
public class MinMaxImpl<T extends Comparable<T>> implements MinMax<T>{
    /*
        将要比较大小的数据传递给该实例,这样在min()、max()方法中就可以实现筛选出最小、最大值。
     */
    private T[] ts;
    public MinMaxImpl(T[] ts){
        this.ts = ts;
    }

    @Override
    public T min() {
        T step = ts[0];
        for (T t : ts) {
            //Comparable只是个标识接口，标识了compareTo()方法,具体比较还是看具体类型T重写的compareTo()方法
            if (step.compareTo(t)>0) {
                step = t;
            }
        }
        return step;
    }

    @Override
    public T max() {
        T step = ts[0];
        for (T t : ts) {
            if (t.compareTo(step)>0) {
                step = t;
            }
        }
        return step;
    }
}
